package cn.zshprint.serein.exception;

import lombok.Data;

/**
 * 服务异常
 *
 * @author zshprint
 * @date 2021/07/28
 */
@Data
public class ServiceException extends RuntimeException {
    /**
     * 代码
     */
    private int code = 500;

    /**
     * 服务异常
     */
    public ServiceException() {
    }

    /**
     * 服务异常
     *
     * @param message 消息
     */
    public ServiceException(String message) {
        super(message);
    }

    /**
     * 服务异常
     *
     * @param message 消息
     * @param cause   导致
     */
    public ServiceException(String message, Throwable cause) {
        super(message, cause);
    }

    /**
     * 服务异常
     *
     * @param cause 导致
     */
    public ServiceException(Throwable cause) {
        super(cause);
    }

    /**
     * 服务异常
     *
     * @param message            消息
     * @param cause              导致
     * @param enableSuppression  使抑制
     * @param writableStackTrace 可写的堆栈跟踪
     */
    public ServiceException(String message, Throwable cause,
                            boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }

    /**
     * 服务异常
     *
     * @param code 代码
     */
    public ServiceException(int code) {
        this.code = code;
    }

    /**
     * 服务异常
     *
     * @param message 消息
     * @param code    代码
     */
    public ServiceException(String message, int code) {
        super(message);
        this.code = code;
    }

    /**
     * 服务异常
     *
     * @param message 消息
     * @param cause   导致
     * @param code    代码
     */
    public ServiceException(String message, Throwable cause,
                            int code) {
        super(message, cause);
        this.code = code;
    }

    /**
     * 服务异常
     *
     * @param cause 导致
     * @param code  代码
     */
    public ServiceException(Throwable cause, int code) {
        super(cause);
        this.code = code;
    }

    /**
     * 服务异常
     *
     * @param message            消息
     * @param cause              导致
     * @param enableSuppression  使抑制
     * @param writableStackTrace 可写的堆栈跟踪
     * @param code               代码
     */
    public ServiceException(String message, Throwable cause,
                            boolean enableSuppression, boolean writableStackTrace, int code) {
        super(message, cause, enableSuppression, writableStackTrace);
        this.code = code;
    }

    /**
     * 字符串
     *
     * @return {@link String}
     */
    @Override
    public String toString() {
        return "ServiceException{" +
                "code=" + code +
                "message=" + this.getMessage() +
                '}';
    }
}

